package com.chuangsi.project.admin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chuangsi.project.admin.domain.Order;
import com.chuangsi.project.admin.dto.admin.approve.ReqApplyBackDto;
import com.chuangsi.project.admin.dto.admin.index.ResIndexDto;
import com.chuangsi.project.admin.dto.admin.order.*;
import com.chuangsi.project.admin.dto.app.ReqAppletsOrderPageDto;
import com.chuangsi.project.admin.dto.app.ResAppletsOrderPageDto;
import com.chuangsi.project.admin.dto.app.esign.*;
import com.chuangsi.project.admin.dto.app.order.*;
import com.chuangsi.project.admin.dto.common.SelectDto;
import org.springframework.web.multipart.MultipartFile;


import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 订单表 服务类
 * </p>
 *
 * @author 
 * @since 2023-03-23
 */
public interface OrderService extends IService<Order> {



    List<ResOrderPageDto> pageQuery(ReqOrderPageDto req);

    ResOrderDetailDto detail(ReqOrderDetailDto req);

    boolean pass(ReqOrderPassDto req);

    OrderIdDto sign(ReqSignDto req);

    ResIndexDto indexInfo();

    List<ResAppletsOrderPageDto> orderPageQuery(ReqAppletsOrderPageDto req);

    ResOrderAppletsDetailDto orderDetail(ReqOrderDetailDto req);

    boolean applyBack(ReqApplyBackDto req);

    ResESignGetFileUpDto signTurned(ReqESignGetFileUpDto req);

    ResESignGetSignFlowDetailDto getSignDetail(ReqESignGetSignFlowDetailDto req);

    ResESignDownloadDto download(ReqESignDownloadDto req);

    //=============E签宝流程//=============
    boolean orderUpdate(ReqOrderUpdateDto req);


    boolean updateOrder(ReqOrderUpdateAdminDto req);

    Map<String, Map<String, Object>> setPicMap(ReqOrderExportIdDto req);

    void export(ReqOrderPageDto dto, HttpServletResponse response);

    /**
     * 添加备注
     * @param req
     */
    void remark(ReqRemarkDto req);

    /**
     * 订单状态下拉选
     * @return
     */
    List<SelectDto> orderStatusSelect();

    /**
     * 订单改变状态
     * @param dto
     */
    void changeStatus(ReqOrderChangeStatusDto dto);

    /**
     * 生成支付的信息，如果是线上，那么就返回拉起微信支付的信息，如果是线下，那么就返回支付图片
     * @param req
     */
    ResPlaceAnOrderDto placeAnOrder(ReqPlaceAnOrderDto req);

    /**
     * 财务分页
     * @param req
     * @return
     */
    List<ResFinanceOrderPageDto> financePageQuery(ReqFinanceOrderPageDto req);


    /**
     * 财务导出
     * @param dto
     * @param response
     */
    void financeExport(ReqFinanceOrderPageDto dto, HttpServletResponse response);

    /**
     * 财务-导入
     * @param file
     */
    void financeImport(MultipartFile file);

    /**
     * 删除订单
     * @param orderId
     */
    void delOrder(String orderId);

    /**
     * 上传发票
     * @param req
     * @return
     */
    boolean uploadInvoice(ReqOrderUploadInvoiceDto req);

    /**
     * 获取订单id(简单版本)
     * @param orderId
     * @return
     */
    Order getSimpleOrder(String orderId);

    /**
     * 客户自己获取订单详情
     * @return
     */
    ResOrderAppletsDetailDto orderDetailForUser();

    /**
     * 申请开票
     * @param req
     */
    void applyInvoice(ReqApplyInvoiceDto req);

    /**
     * 附件上传
     * @param orderId
     * @param file
     */
    void uploadAttachments(ReqUploadAttachmentsDto dto);

    /**
     * 删除附件
     * @param id
     * @return
     */
    boolean deleteFile(String id);
}
